#include <string.h>
#include <stdio.h>
#include <stdlib.h>

void quicksort(int arr[], int low, int high)
{
	int R = high; // 结束索引
	if (low >= high)
		return;			// 如果起始索引大于等于结束索引，说明数组中只有一个元素或者没有元素
	int top = arr[low]; // 将起始索引处的元素作为基准值top
	while (low < high)	// 进入循环直到起始索引等于结束索引
	{
		// 从数组末尾向前搜索，找到第一个小于基准值top的元素的索引high
		while (low < high && top <= arr[high])
			high--;
		arr[low] = arr[high]; // 移到起始索引
		while (low < high && top >= arr[low])
			low++;
		arr[high] = arr[low];
	}
	arr[low] = top;				// 将基准值放回数组中，此时基准值左边的元素都小于基准值，右边拿到元素都大于基准值
	quicksort(arr, 0, low - 1); // 递归调用快速排序函数，对基准值左边的子数组进行排序
	quicksort(arr, low + 1, R);
}

int main(int argc, char *argv[])
{
	// 请在此输入您的代码
	int N, low, high;
	scanf("%d", &N);
	int arr[101];
	for (int i = 0; i < N; i++)
	{
		scanf("%d", &arr[i]);
	}
	quicksort(arr, 0, N - 1);
	for (int i = 0; i < N; i++)
		printf("%d ", arr[i]);

	return 0;
}